/******************************************************************************* 
 *  Copyright 2007 Amazon Technologies, Inc.  
 *  Licensed under the Apache License, Version 2.0 (the "License"); 
 *  
 *  You may not use this file except in compliance with the License. 
 *  You may obtain a copy of the License at: http://aws.amazon.com/apache2.0
 *  This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
 *  CONDITIONS OF ANY KIND, either express or implied. See the License for the 
 *  specific language governing permissions and limitations under the License.
 * ***************************************************************************** 
 *    __  _    _  ___ 
 *   (  )( \/\/ )/ __)
 *   /__\ \    / \__ \
 *  (_)(_) \/\/  (___/
 * 
 *  Amazon ECS CSharp Library
 *  API Version: 2007-07-16
 *  Generated: Thu Aug 02 10:15:38 PDT 2007 
 * 
 */

using System;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Text;


namespace Amazon.ECS.Model
{
    [XmlTypeAttribute(Namespace = "http://webservices.amazon.com/AWSECommerceService/2007-07-16")]
    [XmlRootAttribute(Namespace = "http://webservices.amazon.com/AWSECommerceService/2007-07-16", IsNullable = false)]
    public class ItemSearchRequest
    {
    
        private String actorField;

        private String artistField;

        private String availabilityField;

        private List<String> audienceRatingField;

        private String authorField;

        private String brandField;

        private String browseNodeField;

        private String cityField;

        private String composerField;

        private Condition? conditionField;

        private String conductorField;

        private Decimal? countField;

        private String cuisineField;

        private DeliveryMethod? deliveryMethodField;

        private String directorField;

        private String futureLaunchDateField;

        private String ISPUPostalCodeField;

        private Decimal? itemPageField;

        private String keywordsField;

        private String manufacturerField;

        private Decimal? maximumPriceField;

        private String merchantIdField;

        private Decimal? minimumPriceField;

        private String musicLabelField;

        private String neighborhoodField;

        private String orchestraField;

        private String postalCodeField;

        private String powerField;

        private String publisherField;

        private List<String> responseGroupField;

        private String reviewSortField;

        private String searchIndexField;

        private String sortField;

        private String stateField;

        private Decimal? tagPageField;

        private Decimal? tagsPerPageField;

        private String tagSortField;

        private String textStreamField;

        private String titleField;

        private String releaseDateField;


        /// <summary>
        /// Gets and sets the Actor property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Actor")]
        public String Actor
        {
            get { return this.actorField ; }
            set { this.actorField= value; }
        }



        /// <summary>
        /// Sets the Actor property
        /// </summary>
        /// <param name="actor">Actor property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithActor(String actor)
        {
            this.actorField = actor;
            return this;
        }



        /// <summary>
        /// Checks if Actor property is set
        /// </summary>
        /// <returns>true if Actor property is set</returns>
        public Boolean IsSetActor()
        {
            return  this.actorField != null;

        }


        /// <summary>
        /// Gets and sets the Artist property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Artist")]
        public String Artist
        {
            get { return this.artistField ; }
            set { this.artistField= value; }
        }



        /// <summary>
        /// Sets the Artist property
        /// </summary>
        /// <param name="artist">Artist property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithArtist(String artist)
        {
            this.artistField = artist;
            return this;
        }



        /// <summary>
        /// Checks if Artist property is set
        /// </summary>
        /// <returns>true if Artist property is set</returns>
        public Boolean IsSetArtist()
        {
            return  this.artistField != null;

        }


        /// <summary>
        /// Gets and sets the Availability property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Availability")]
        public String Availability
        {
            get { return this.availabilityField ; }
            set { this.availabilityField= value; }
        }



        /// <summary>
        /// Sets the Availability property
        /// </summary>
        /// <param name="availability">Availability property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithAvailability(String availability)
        {
            this.availabilityField = availability;
            return this;
        }



        /// <summary>
        /// Checks if Availability property is set
        /// </summary>
        /// <returns>true if Availability property is set</returns>
        public Boolean IsSetAvailability()
        {
            return this.availabilityField != null;

        }


        /// <summary>
        /// Gets and sets the AudienceRating property.
        /// </summary>
        [XmlElementAttribute(ElementName = "AudienceRating")]
        public List<String> AudienceRating
        {
            get
            {
                if (this.audienceRatingField == null)
                {
                    this.audienceRatingField = new List<String>();
                }
                return this.audienceRatingField;
            }
            set { this.audienceRatingField =  value; }
        }



        /// <summary>
        /// Sets the AudienceRating property
        /// </summary>
        /// <param name="list">AudienceRating property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithAudienceRating(params String[] list)
        {
            foreach (String item in list)
            {
                AudienceRating.Add(item);
            }
            return this;
        }          
 


        /// <summary>
        /// Checks of AudienceRating property is set
        /// </summary>
        /// <returns>true if AudienceRating property is set</returns>
        public Boolean IsSetAudienceRating()
        {
            return (AudienceRating.Count > 0);
        }




        /// <summary>
        /// Gets and sets the Author property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Author")]
        public String Author
        {
            get { return this.authorField ; }
            set { this.authorField= value; }
        }



        /// <summary>
        /// Sets the Author property
        /// </summary>
        /// <param name="author">Author property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithAuthor(String author)
        {
            this.authorField = author;
            return this;
        }



        /// <summary>
        /// Checks if Author property is set
        /// </summary>
        /// <returns>true if Author property is set</returns>
        public Boolean IsSetAuthor()
        {
            return  this.authorField != null;

        }


        /// <summary>
        /// Gets and sets the Brand property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Brand")]
        public String Brand
        {
            get { return this.brandField ; }
            set { this.brandField= value; }
        }



        /// <summary>
        /// Sets the Brand property
        /// </summary>
        /// <param name="brand">Brand property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithBrand(String brand)
        {
            this.brandField = brand;
            return this;
        }



        /// <summary>
        /// Checks if Brand property is set
        /// </summary>
        /// <returns>true if Brand property is set</returns>
        public Boolean IsSetBrand()
        {
            return  this.brandField != null;

        }


        /// <summary>
        /// Gets and sets the BrowseNode property.
        /// </summary>
        [XmlElementAttribute(ElementName = "BrowseNode")]
        public String BrowseNode
        {
            get { return this.browseNodeField ; }
            set { this.browseNodeField= value; }
        }



        /// <summary>
        /// Sets the BrowseNode property
        /// </summary>
        /// <param name="browseNode">BrowseNode property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithBrowseNode(String browseNode)
        {
            this.browseNodeField = browseNode;
            return this;
        }



        /// <summary>
        /// Checks if BrowseNode property is set
        /// </summary>
        /// <returns>true if BrowseNode property is set</returns>
        public Boolean IsSetBrowseNode()
        {
            return  this.browseNodeField != null;

        }


        /// <summary>
        /// Gets and sets the City property.
        /// </summary>
        [XmlElementAttribute(ElementName = "City")]
        public String City
        {
            get { return this.cityField ; }
            set { this.cityField= value; }
        }



        /// <summary>
        /// Sets the City property
        /// </summary>
        /// <param name="city">City property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithCity(String city)
        {
            this.cityField = city;
            return this;
        }



        /// <summary>
        /// Checks if City property is set
        /// </summary>
        /// <returns>true if City property is set</returns>
        public Boolean IsSetCity()
        {
            return  this.cityField != null;

        }


        /// <summary>
        /// Gets and sets the Composer property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Composer")]
        public String Composer
        {
            get { return this.composerField ; }
            set { this.composerField= value; }
        }



        /// <summary>
        /// Sets the Composer property
        /// </summary>
        /// <param name="composer">Composer property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithComposer(String composer)
        {
            this.composerField = composer;
            return this;
        }



        /// <summary>
        /// Checks if Composer property is set
        /// </summary>
        /// <returns>true if Composer property is set</returns>
        public Boolean IsSetComposer()
        {
            return  this.composerField != null;

        }


        /// <summary>
        /// Gets and sets the Condition property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Condition")]
        public Condition Condition
        {
            get { return this.conditionField.GetValueOrDefault() ; }
            set { this.conditionField= value; }
        }



        /// <summary>
        /// Sets the Condition property
        /// </summary>
        /// <param name="condition">Condition property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithCondition(Condition condition)
        {
            this.conditionField = condition;
            return this;
        }



        /// <summary>
        /// Checks if Condition property is set
        /// </summary>
        /// <returns>true if Condition property is set</returns>
        public Boolean IsSetCondition()
        {
            return this.conditionField.HasValue;

        }


        /// <summary>
        /// Gets and sets the Conductor property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Conductor")]
        public String Conductor
        {
            get { return this.conductorField ; }
            set { this.conductorField= value; }
        }



        /// <summary>
        /// Sets the Conductor property
        /// </summary>
        /// <param name="conductor">Conductor property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithConductor(String conductor)
        {
            this.conductorField = conductor;
            return this;
        }



        /// <summary>
        /// Checks if Conductor property is set
        /// </summary>
        /// <returns>true if Conductor property is set</returns>
        public Boolean IsSetConductor()
        {
            return  this.conductorField != null;

        }


        /// <summary>
        /// Gets and sets the Count property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Count")]
        public Decimal Count
        {
            get { return this.countField.GetValueOrDefault() ; }
            set { this.countField= value; }
        }



        /// <summary>
        /// Sets the Count property
        /// </summary>
        /// <param name="count">Count property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithCount(Decimal count)
        {
            this.countField = count;
            return this;
        }



        /// <summary>
        /// Checks if Count property is set
        /// </summary>
        /// <returns>true if Count property is set</returns>
        public Boolean IsSetCount()
        {
            return  this.countField != null;

        }


        /// <summary>
        /// Gets and sets the Cuisine property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Cuisine")]
        public String Cuisine
        {
            get { return this.cuisineField ; }
            set { this.cuisineField= value; }
        }



        /// <summary>
        /// Sets the Cuisine property
        /// </summary>
        /// <param name="cuisine">Cuisine property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithCuisine(String cuisine)
        {
            this.cuisineField = cuisine;
            return this;
        }



        /// <summary>
        /// Checks if Cuisine property is set
        /// </summary>
        /// <returns>true if Cuisine property is set</returns>
        public Boolean IsSetCuisine()
        {
            return  this.cuisineField != null;

        }


        /// <summary>
        /// Gets and sets the DeliveryMethod property.
        /// </summary>
        [XmlElementAttribute(ElementName = "DeliveryMethod")]
        public DeliveryMethod DeliveryMethod
        {
            get { return this.deliveryMethodField.GetValueOrDefault() ; }
            set { this.deliveryMethodField= value; }
        }



        /// <summary>
        /// Sets the DeliveryMethod property
        /// </summary>
        /// <param name="deliveryMethod">DeliveryMethod property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithDeliveryMethod(DeliveryMethod deliveryMethod)
        {
            this.deliveryMethodField = deliveryMethod;
            return this;
        }



        /// <summary>
        /// Checks if DeliveryMethod property is set
        /// </summary>
        /// <returns>true if DeliveryMethod property is set</returns>
        public Boolean IsSetDeliveryMethod()
        {
            return this.deliveryMethodField.HasValue;

        }


        /// <summary>
        /// Gets and sets the Director property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Director")]
        public String Director
        {
            get { return this.directorField ; }
            set { this.directorField= value; }
        }



        /// <summary>
        /// Sets the Director property
        /// </summary>
        /// <param name="director">Director property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithDirector(String director)
        {
            this.directorField = director;
            return this;
        }



        /// <summary>
        /// Checks if Director property is set
        /// </summary>
        /// <returns>true if Director property is set</returns>
        public Boolean IsSetDirector()
        {
            return  this.directorField != null;

        }


        /// <summary>
        /// Gets and sets the FutureLaunchDate property.
        /// </summary>
        [XmlElementAttribute(ElementName = "FutureLaunchDate")]
        public String FutureLaunchDate
        {
            get { return this.futureLaunchDateField ; }
            set { this.futureLaunchDateField= value; }
        }



        /// <summary>
        /// Sets the FutureLaunchDate property
        /// </summary>
        /// <param name="futureLaunchDate">FutureLaunchDate property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithFutureLaunchDate(String futureLaunchDate)
        {
            this.futureLaunchDateField = futureLaunchDate;
            return this;
        }



        /// <summary>
        /// Checks if FutureLaunchDate property is set
        /// </summary>
        /// <returns>true if FutureLaunchDate property is set</returns>
        public Boolean IsSetFutureLaunchDate()
        {
            return  this.futureLaunchDateField != null;

        }


        /// <summary>
        /// Gets and sets the ISPUPostalCode property.
        /// </summary>
        [XmlElementAttribute(ElementName = "ISPUPostalCode")]
        public String ISPUPostalCode
        {
            get { return this.ISPUPostalCodeField ; }
            set { this.ISPUPostalCodeField= value; }
        }



        /// <summary>
        /// Sets the ISPUPostalCode property
        /// </summary>
        /// <param name="ISPUPostalCode">ISPUPostalCode property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithISPUPostalCode(String ISPUPostalCode)
        {
            this.ISPUPostalCodeField = ISPUPostalCode;
            return this;
        }



        /// <summary>
        /// Checks if ISPUPostalCode property is set
        /// </summary>
        /// <returns>true if ISPUPostalCode property is set</returns>
        public Boolean IsSetISPUPostalCode()
        {
            return  this.ISPUPostalCodeField != null;

        }


        /// <summary>
        /// Gets and sets the ItemPage property.
        /// </summary>
        [XmlElementAttribute(ElementName = "ItemPage")]
        public Decimal ItemPage
        {
            get { return this.itemPageField.GetValueOrDefault() ; }
            set { this.itemPageField= value; }
        }



        /// <summary>
        /// Sets the ItemPage property
        /// </summary>
        /// <param name="itemPage">ItemPage property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithItemPage(Decimal itemPage)
        {
            this.itemPageField = itemPage;
            return this;
        }



        /// <summary>
        /// Checks if ItemPage property is set
        /// </summary>
        /// <returns>true if ItemPage property is set</returns>
        public Boolean IsSetItemPage()
        {
            return  this.itemPageField != null;

        }


        /// <summary>
        /// Gets and sets the Keywords property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Keywords")]
        public String Keywords
        {
            get { return this.keywordsField ; }
            set { this.keywordsField= value; }
        }



        /// <summary>
        /// Sets the Keywords property
        /// </summary>
        /// <param name="keywords">Keywords property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithKeywords(String keywords)
        {
            this.keywordsField = keywords;
            return this;
        }



        /// <summary>
        /// Checks if Keywords property is set
        /// </summary>
        /// <returns>true if Keywords property is set</returns>
        public Boolean IsSetKeywords()
        {
            return  this.keywordsField != null;

        }


        /// <summary>
        /// Gets and sets the Manufacturer property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Manufacturer")]
        public String Manufacturer
        {
            get { return this.manufacturerField ; }
            set { this.manufacturerField= value; }
        }



        /// <summary>
        /// Sets the Manufacturer property
        /// </summary>
        /// <param name="manufacturer">Manufacturer property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithManufacturer(String manufacturer)
        {
            this.manufacturerField = manufacturer;
            return this;
        }



        /// <summary>
        /// Checks if Manufacturer property is set
        /// </summary>
        /// <returns>true if Manufacturer property is set</returns>
        public Boolean IsSetManufacturer()
        {
            return  this.manufacturerField != null;

        }


        /// <summary>
        /// Gets and sets the MaximumPrice property.
        /// </summary>
        [XmlElementAttribute(ElementName = "MaximumPrice")]
        public Decimal MaximumPrice
        {
            get { return this.maximumPriceField.GetValueOrDefault() ; }
            set { this.maximumPriceField= value; }
        }



        /// <summary>
        /// Sets the MaximumPrice property
        /// </summary>
        /// <param name="maximumPrice">MaximumPrice property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithMaximumPrice(Decimal maximumPrice)
        {
            this.maximumPriceField = maximumPrice;
            return this;
        }



        /// <summary>
        /// Checks if MaximumPrice property is set
        /// </summary>
        /// <returns>true if MaximumPrice property is set</returns>
        public Boolean IsSetMaximumPrice()
        {
            return  this.maximumPriceField != null;

        }


        /// <summary>
        /// Gets and sets the MerchantId property.
        /// </summary>
        [XmlElementAttribute(ElementName = "MerchantId")]
        public String MerchantId
        {
            get { return this.merchantIdField ; }
            set { this.merchantIdField= value; }
        }



        /// <summary>
        /// Sets the MerchantId property
        /// </summary>
        /// <param name="merchantId">MerchantId property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithMerchantId(String merchantId)
        {
            this.merchantIdField = merchantId;
            return this;
        }



        /// <summary>
        /// Checks if MerchantId property is set
        /// </summary>
        /// <returns>true if MerchantId property is set</returns>
        public Boolean IsSetMerchantId()
        {
            return  this.merchantIdField != null;

        }


        /// <summary>
        /// Gets and sets the MinimumPrice property.
        /// </summary>
        [XmlElementAttribute(ElementName = "MinimumPrice")]
        public Decimal MinimumPrice
        {
            get { return this.minimumPriceField.GetValueOrDefault() ; }
            set { this.minimumPriceField= value; }
        }



        /// <summary>
        /// Sets the MinimumPrice property
        /// </summary>
        /// <param name="minimumPrice">MinimumPrice property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithMinimumPrice(Decimal minimumPrice)
        {
            this.minimumPriceField = minimumPrice;
            return this;
        }



        /// <summary>
        /// Checks if MinimumPrice property is set
        /// </summary>
        /// <returns>true if MinimumPrice property is set</returns>
        public Boolean IsSetMinimumPrice()
        {
            return  this.minimumPriceField != null;

        }


        /// <summary>
        /// Gets and sets the MusicLabel property.
        /// </summary>
        [XmlElementAttribute(ElementName = "MusicLabel")]
        public String MusicLabel
        {
            get { return this.musicLabelField ; }
            set { this.musicLabelField= value; }
        }



        /// <summary>
        /// Sets the MusicLabel property
        /// </summary>
        /// <param name="musicLabel">MusicLabel property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithMusicLabel(String musicLabel)
        {
            this.musicLabelField = musicLabel;
            return this;
        }



        /// <summary>
        /// Checks if MusicLabel property is set
        /// </summary>
        /// <returns>true if MusicLabel property is set</returns>
        public Boolean IsSetMusicLabel()
        {
            return  this.musicLabelField != null;

        }


        /// <summary>
        /// Gets and sets the Neighborhood property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Neighborhood")]
        public String Neighborhood
        {
            get { return this.neighborhoodField ; }
            set { this.neighborhoodField= value; }
        }



        /// <summary>
        /// Sets the Neighborhood property
        /// </summary>
        /// <param name="neighborhood">Neighborhood property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithNeighborhood(String neighborhood)
        {
            this.neighborhoodField = neighborhood;
            return this;
        }



        /// <summary>
        /// Checks if Neighborhood property is set
        /// </summary>
        /// <returns>true if Neighborhood property is set</returns>
        public Boolean IsSetNeighborhood()
        {
            return  this.neighborhoodField != null;

        }


        /// <summary>
        /// Gets and sets the Orchestra property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Orchestra")]
        public String Orchestra
        {
            get { return this.orchestraField ; }
            set { this.orchestraField= value; }
        }



        /// <summary>
        /// Sets the Orchestra property
        /// </summary>
        /// <param name="orchestra">Orchestra property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithOrchestra(String orchestra)
        {
            this.orchestraField = orchestra;
            return this;
        }



        /// <summary>
        /// Checks if Orchestra property is set
        /// </summary>
        /// <returns>true if Orchestra property is set</returns>
        public Boolean IsSetOrchestra()
        {
            return  this.orchestraField != null;

        }


        /// <summary>
        /// Gets and sets the PostalCode property.
        /// </summary>
        [XmlElementAttribute(ElementName = "PostalCode")]
        public String PostalCode
        {
            get { return this.postalCodeField ; }
            set { this.postalCodeField= value; }
        }



        /// <summary>
        /// Sets the PostalCode property
        /// </summary>
        /// <param name="postalCode">PostalCode property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithPostalCode(String postalCode)
        {
            this.postalCodeField = postalCode;
            return this;
        }



        /// <summary>
        /// Checks if PostalCode property is set
        /// </summary>
        /// <returns>true if PostalCode property is set</returns>
        public Boolean IsSetPostalCode()
        {
            return  this.postalCodeField != null;

        }


        /// <summary>
        /// Gets and sets the Power property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Power")]
        public String Power
        {
            get { return this.powerField ; }
            set { this.powerField= value; }
        }



        /// <summary>
        /// Sets the Power property
        /// </summary>
        /// <param name="power">Power property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithPower(String power)
        {
            this.powerField = power;
            return this;
        }



        /// <summary>
        /// Checks if Power property is set
        /// </summary>
        /// <returns>true if Power property is set</returns>
        public Boolean IsSetPower()
        {
            return  this.powerField != null;

        }


        /// <summary>
        /// Gets and sets the Publisher property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Publisher")]
        public String Publisher
        {
            get { return this.publisherField ; }
            set { this.publisherField= value; }
        }



        /// <summary>
        /// Sets the Publisher property
        /// </summary>
        /// <param name="publisher">Publisher property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithPublisher(String publisher)
        {
            this.publisherField = publisher;
            return this;
        }



        /// <summary>
        /// Checks if Publisher property is set
        /// </summary>
        /// <returns>true if Publisher property is set</returns>
        public Boolean IsSetPublisher()
        {
            return  this.publisherField != null;

        }


        /// <summary>
        /// Gets and sets the ResponseGroup property.
        /// </summary>
        [XmlElementAttribute(ElementName = "ResponseGroup")]
        public List<String> ResponseGroup
        {
            get
            {
                if (this.responseGroupField == null)
                {
                    this.responseGroupField = new List<String>();
                }
                return this.responseGroupField;
            }
            set { this.responseGroupField =  value; }
        }



        /// <summary>
        /// Sets the ResponseGroup property
        /// </summary>
        /// <param name="list">ResponseGroup property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithResponseGroup(params String[] list)
        {
            foreach (String item in list)
            {
                ResponseGroup.Add(item);
            }
            return this;
        }          
 


        /// <summary>
        /// Checks of ResponseGroup property is set
        /// </summary>
        /// <returns>true if ResponseGroup property is set</returns>
        public Boolean IsSetResponseGroup()
        {
            return (ResponseGroup.Count > 0);
        }




        /// <summary>
        /// Gets and sets the ReviewSort property.
        /// </summary>
        [XmlElementAttribute(ElementName = "ReviewSort")]
        public String ReviewSort
        {
            get { return this.reviewSortField ; }
            set { this.reviewSortField= value; }
        }



        /// <summary>
        /// Sets the ReviewSort property
        /// </summary>
        /// <param name="reviewSort">ReviewSort property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithReviewSort(String reviewSort)
        {
            this.reviewSortField = reviewSort;
            return this;
        }



        /// <summary>
        /// Checks if ReviewSort property is set
        /// </summary>
        /// <returns>true if ReviewSort property is set</returns>
        public Boolean IsSetReviewSort()
        {
            return  this.reviewSortField != null;

        }


        /// <summary>
        /// Gets and sets the SearchIndex property.
        /// </summary>
        [XmlElementAttribute(ElementName = "SearchIndex")]
        public String SearchIndex
        {
            get { return this.searchIndexField ; }
            set { this.searchIndexField= value; }
        }



        /// <summary>
        /// Sets the SearchIndex property
        /// </summary>
        /// <param name="searchIndex">SearchIndex property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithSearchIndex(String searchIndex)
        {
            this.searchIndexField = searchIndex;
            return this;
        }



        /// <summary>
        /// Checks if SearchIndex property is set
        /// </summary>
        /// <returns>true if SearchIndex property is set</returns>
        public Boolean IsSetSearchIndex()
        {
            return  this.searchIndexField != null;

        }


        /// <summary>
        /// Gets and sets the Sort property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Sort")]
        public String Sort
        {
            get { return this.sortField ; }
            set { this.sortField= value; }
        }



        /// <summary>
        /// Sets the Sort property
        /// </summary>
        /// <param name="sort">Sort property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithSort(String sort)
        {
            this.sortField = sort;
            return this;
        }



        /// <summary>
        /// Checks if Sort property is set
        /// </summary>
        /// <returns>true if Sort property is set</returns>
        public Boolean IsSetSort()
        {
            return  this.sortField != null;

        }


        /// <summary>
        /// Gets and sets the State property.
        /// </summary>
        [XmlElementAttribute(ElementName = "State")]
        public String State
        {
            get { return this.stateField ; }
            set { this.stateField= value; }
        }



        /// <summary>
        /// Sets the State property
        /// </summary>
        /// <param name="state">State property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithState(String state)
        {
            this.stateField = state;
            return this;
        }



        /// <summary>
        /// Checks if State property is set
        /// </summary>
        /// <returns>true if State property is set</returns>
        public Boolean IsSetState()
        {
            return  this.stateField != null;

        }


        /// <summary>
        /// Gets and sets the TagPage property.
        /// </summary>
        [XmlElementAttribute(ElementName = "TagPage")]
        public Decimal TagPage
        {
            get { return this.tagPageField.GetValueOrDefault() ; }
            set { this.tagPageField= value; }
        }



        /// <summary>
        /// Sets the TagPage property
        /// </summary>
        /// <param name="tagPage">TagPage property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithTagPage(Decimal tagPage)
        {
            this.tagPageField = tagPage;
            return this;
        }



        /// <summary>
        /// Checks if TagPage property is set
        /// </summary>
        /// <returns>true if TagPage property is set</returns>
        public Boolean IsSetTagPage()
        {
            return  this.tagPageField != null;

        }


        /// <summary>
        /// Gets and sets the TagsPerPage property.
        /// </summary>
        [XmlElementAttribute(ElementName = "TagsPerPage")]
        public Decimal TagsPerPage
        {
            get { return this.tagsPerPageField.GetValueOrDefault() ; }
            set { this.tagsPerPageField= value; }
        }



        /// <summary>
        /// Sets the TagsPerPage property
        /// </summary>
        /// <param name="tagsPerPage">TagsPerPage property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithTagsPerPage(Decimal tagsPerPage)
        {
            this.tagsPerPageField = tagsPerPage;
            return this;
        }



        /// <summary>
        /// Checks if TagsPerPage property is set
        /// </summary>
        /// <returns>true if TagsPerPage property is set</returns>
        public Boolean IsSetTagsPerPage()
        {
            return  this.tagsPerPageField != null;

        }


        /// <summary>
        /// Gets and sets the TagSort property.
        /// </summary>
        [XmlElementAttribute(ElementName = "TagSort")]
        public String TagSort
        {
            get { return this.tagSortField ; }
            set { this.tagSortField= value; }
        }



        /// <summary>
        /// Sets the TagSort property
        /// </summary>
        /// <param name="tagSort">TagSort property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithTagSort(String tagSort)
        {
            this.tagSortField = tagSort;
            return this;
        }



        /// <summary>
        /// Checks if TagSort property is set
        /// </summary>
        /// <returns>true if TagSort property is set</returns>
        public Boolean IsSetTagSort()
        {
            return  this.tagSortField != null;

        }


        /// <summary>
        /// Gets and sets the TextStream property.
        /// </summary>
        [XmlElementAttribute(ElementName = "TextStream")]
        public String TextStream
        {
            get { return this.textStreamField ; }
            set { this.textStreamField= value; }
        }



        /// <summary>
        /// Sets the TextStream property
        /// </summary>
        /// <param name="textStream">TextStream property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithTextStream(String textStream)
        {
            this.textStreamField = textStream;
            return this;
        }



        /// <summary>
        /// Checks if TextStream property is set
        /// </summary>
        /// <returns>true if TextStream property is set</returns>
        public Boolean IsSetTextStream()
        {
            return  this.textStreamField != null;

        }


        /// <summary>
        /// Gets and sets the Title property.
        /// </summary>
        [XmlElementAttribute(ElementName = "Title")]
        public String Title
        {
            get { return this.titleField ; }
            set { this.titleField= value; }
        }



        /// <summary>
        /// Sets the Title property
        /// </summary>
        /// <param name="title">Title property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithTitle(String title)
        {
            this.titleField = title;
            return this;
        }



        /// <summary>
        /// Checks if Title property is set
        /// </summary>
        /// <returns>true if Title property is set</returns>
        public Boolean IsSetTitle()
        {
            return  this.titleField != null;

        }


        /// <summary>
        /// Gets and sets the ReleaseDate property.
        /// </summary>
        [XmlElementAttribute(ElementName = "ReleaseDate")]
        public String ReleaseDate
        {
            get { return this.releaseDateField ; }
            set { this.releaseDateField= value; }
        }



        /// <summary>
        /// Sets the ReleaseDate property
        /// </summary>
        /// <param name="releaseDate">ReleaseDate property</param>
        /// <returns>this instance</returns>
        public ItemSearchRequest WithReleaseDate(String releaseDate)
        {
            this.releaseDateField = releaseDate;
            return this;
        }



        /// <summary>
        /// Checks if ReleaseDate property is set
        /// </summary>
        /// <returns>true if ReleaseDate property is set</returns>
        public Boolean IsSetReleaseDate()
        {
            return  this.releaseDateField != null;

        }




        /// <summary>
        /// XML fragment representation of this object
        /// </summary>
        /// <returns>XML fragment for this object.</returns>
        /// <remarks>
        /// Name for outer tag expected to be set by calling method. 
        /// This fragment returns inner properties representation only
        /// </remarks>


        protected internal String ToXMLFragment() {
            StringBuilder xml = new StringBuilder();
            if (IsSetActor()) {
                xml.Append("<Actor>");
                xml.Append(EscapeXML(this.Actor));
                xml.Append("</Actor>");
            }
            if (IsSetArtist()) {
                xml.Append("<Artist>");
                xml.Append(EscapeXML(this.Artist));
                xml.Append("</Artist>");
            }
            if (IsSetAvailability()) {
                xml.Append("<Availability>");
                xml.Append(this.Availability);
                xml.Append("</Availability>");
            }
            List<String> audienceRatingList  =  this.AudienceRating;
            foreach (String audienceRating in audienceRatingList) { 
                xml.Append("<AudienceRating>");
                xml.Append(audienceRating);
                xml.Append("</AudienceRating>");
            }	
            if (IsSetAuthor()) {
                xml.Append("<Author>");
                xml.Append(EscapeXML(this.Author));
                xml.Append("</Author>");
            }
            if (IsSetBrand()) {
                xml.Append("<Brand>");
                xml.Append(EscapeXML(this.Brand));
                xml.Append("</Brand>");
            }
            if (IsSetBrowseNode()) {
                xml.Append("<BrowseNode>");
                xml.Append(EscapeXML(this.BrowseNode));
                xml.Append("</BrowseNode>");
            }
            if (IsSetCity()) {
                xml.Append("<City>");
                xml.Append(EscapeXML(this.City));
                xml.Append("</City>");
            }
            if (IsSetComposer()) {
                xml.Append("<Composer>");
                xml.Append(EscapeXML(this.Composer));
                xml.Append("</Composer>");
            }
            if (IsSetCondition()) {
                xml.Append("<Condition>");
                xml.Append(this.Condition);
                xml.Append("</Condition>");
            }
            if (IsSetConductor()) {
                xml.Append("<Conductor>");
                xml.Append(EscapeXML(this.Conductor));
                xml.Append("</Conductor>");
            }
            if (IsSetCount()) {
                xml.Append("<Count>");
                xml.Append(this.Count);
                xml.Append("</Count>");
            }
            if (IsSetCuisine()) {
                xml.Append("<Cuisine>");
                xml.Append(EscapeXML(this.Cuisine));
                xml.Append("</Cuisine>");
            }
            if (IsSetDeliveryMethod()) {
                xml.Append("<DeliveryMethod>");
                xml.Append(this.DeliveryMethod);
                xml.Append("</DeliveryMethod>");
            }
            if (IsSetDirector()) {
                xml.Append("<Director>");
                xml.Append(EscapeXML(this.Director));
                xml.Append("</Director>");
            }
            if (IsSetFutureLaunchDate()) {
                xml.Append("<FutureLaunchDate>");
                xml.Append(EscapeXML(this.FutureLaunchDate));
                xml.Append("</FutureLaunchDate>");
            }
            if (IsSetISPUPostalCode()) {
                xml.Append("<ISPUPostalCode>");
                xml.Append(EscapeXML(this.ISPUPostalCode));
                xml.Append("</ISPUPostalCode>");
            }
            if (IsSetItemPage()) {
                xml.Append("<ItemPage>");
                xml.Append(this.ItemPage);
                xml.Append("</ItemPage>");
            }
            if (IsSetKeywords()) {
                xml.Append("<Keywords>");
                xml.Append(EscapeXML(this.Keywords));
                xml.Append("</Keywords>");
            }
            if (IsSetManufacturer()) {
                xml.Append("<Manufacturer>");
                xml.Append(EscapeXML(this.Manufacturer));
                xml.Append("</Manufacturer>");
            }
            if (IsSetMaximumPrice()) {
                xml.Append("<MaximumPrice>");
                xml.Append(this.MaximumPrice);
                xml.Append("</MaximumPrice>");
            }
            if (IsSetMerchantId()) {
                xml.Append("<MerchantId>");
                xml.Append(EscapeXML(this.MerchantId));
                xml.Append("</MerchantId>");
            }
            if (IsSetMinimumPrice()) {
                xml.Append("<MinimumPrice>");
                xml.Append(this.MinimumPrice);
                xml.Append("</MinimumPrice>");
            }
            if (IsSetMusicLabel()) {
                xml.Append("<MusicLabel>");
                xml.Append(EscapeXML(this.MusicLabel));
                xml.Append("</MusicLabel>");
            }
            if (IsSetNeighborhood()) {
                xml.Append("<Neighborhood>");
                xml.Append(EscapeXML(this.Neighborhood));
                xml.Append("</Neighborhood>");
            }
            if (IsSetOrchestra()) {
                xml.Append("<Orchestra>");
                xml.Append(EscapeXML(this.Orchestra));
                xml.Append("</Orchestra>");
            }
            if (IsSetPostalCode()) {
                xml.Append("<PostalCode>");
                xml.Append(EscapeXML(this.PostalCode));
                xml.Append("</PostalCode>");
            }
            if (IsSetPower()) {
                xml.Append("<Power>");
                xml.Append(EscapeXML(this.Power));
                xml.Append("</Power>");
            }
            if (IsSetPublisher()) {
                xml.Append("<Publisher>");
                xml.Append(EscapeXML(this.Publisher));
                xml.Append("</Publisher>");
            }
            List<String> responseGroupList  =  this.ResponseGroup;
            foreach (String responseGroup in responseGroupList) { 
                xml.Append("<ResponseGroup>");
                xml.Append(responseGroup);
                xml.Append("</ResponseGroup>");
            }	
            if (IsSetReviewSort()) {
                xml.Append("<ReviewSort>");
                xml.Append(EscapeXML(this.ReviewSort));
                xml.Append("</ReviewSort>");
            }
            if (IsSetSearchIndex()) {
                xml.Append("<SearchIndex>");
                xml.Append(EscapeXML(this.SearchIndex));
                xml.Append("</SearchIndex>");
            }
            if (IsSetSort()) {
                xml.Append("<Sort>");
                xml.Append(EscapeXML(this.Sort));
                xml.Append("</Sort>");
            }
            if (IsSetState()) {
                xml.Append("<State>");
                xml.Append(EscapeXML(this.State));
                xml.Append("</State>");
            }
            if (IsSetTagPage()) {
                xml.Append("<TagPage>");
                xml.Append(this.TagPage);
                xml.Append("</TagPage>");
            }
            if (IsSetTagsPerPage()) {
                xml.Append("<TagsPerPage>");
                xml.Append(this.TagsPerPage);
                xml.Append("</TagsPerPage>");
            }
            if (IsSetTagSort()) {
                xml.Append("<TagSort>");
                xml.Append(EscapeXML(this.TagSort));
                xml.Append("</TagSort>");
            }
            if (IsSetTextStream()) {
                xml.Append("<TextStream>");
                xml.Append(EscapeXML(this.TextStream));
                xml.Append("</TextStream>");
            }
            if (IsSetTitle()) {
                xml.Append("<Title>");
                xml.Append(EscapeXML(this.Title));
                xml.Append("</Title>");
            }
            if (IsSetReleaseDate()) {
                xml.Append("<ReleaseDate>");
                xml.Append(EscapeXML(this.ReleaseDate));
                xml.Append("</ReleaseDate>");
            }
            return xml.ToString();
        }

        /**
         * 
         * Escape XML special characters
         */
        private String EscapeXML(String str) {
            StringBuilder sb = new StringBuilder();
            foreach (Char c in str)
            {
                switch (c) {
                case '&':
                    sb.Append("&amp;");
                    break;
                case '<':
                    sb.Append("&lt;");
                    break;
                case '>':
                    sb.Append("&gt;");
                    break;
                case '\'':
                    sb.Append("&#039;");
                    break;
                case '"':
                    sb.Append("&quot;");
                    break;
                default:
                    sb.Append(c);
                    break;
                }
            }
            return sb.ToString();
        }




    }

}